package com.wgy.day30.递归;

/*
Recursion递归:指在当前方法内调用自己的这种现象
递归分类:直接递归和间接递归
       直接递归:方法自身调用自己
       间接递归:A方法调用B方法,B方法调用C方法,C方法调用A方法
注意事项: 1.递归一定要有条件限定,保证递归能够停止下来,否则就会发生栈内存溢出
        2.在递归中虽然有限定条件,但是递归的次数不能太多,否则也会发生栈内存溢出
        3.构造方法禁止递归
* */
public class Demo01Recursion {
    public static void main(String[] args) {
        /* a();*/
        b(1);
    }

    //没有限定条件保证递归能够停止,会一直调用 a()方法,直到栈内存溢出
    //Exception in thread "main" java.lang.StackOverflowError
    public static void a() {
        System.out.println("a方法执行啦");
        a();
    }

    //2.在递归中虽然有限定条件,但是递归的次数不能太多,否则也会发生栈内存溢出
    //Exception in thread "main" java.lang.StackOverflowError
    public static void b(int i) {

        System.out.println(i);
        if (i == 20000) {
            return;//结束方法
        }
        b(++i);
    }

    //3.构造方法禁止递归,直接编译报错不通过的,因为构造方法递归会导致内存中一直有无数多个对象
   /* public Demo01Recursion() {
        Demo01Recursion()
    }*/
}
